#pragma once

#include "Task.h"

#include <chrono>

namespace threadpool {

    class PeriodicTask : public Task {

    public:

        /**
          * @brief  根据指定的优先级、周期间隔和任务函数创建周期任务
          * @note   None
          * @param  priority 优先级
          * @param  period   周期间隔
          * @param  func     任务函数
          */
        PeriodicTask(int priority, std::chrono::milliseconds period, std::function<void()> func) :
                Task(priority, std::move(func)), period_(period) {}

        std::string getType() const override { return "PeriodicTask"; }

        /**
          * @brief  获取周期间隔
          * @note   None
          * @param  None
          * @retval 周期间隔
          */
        std::chrono::milliseconds getPeriod() const { return period_; }

        /**
          * @brief  设置周期间隔
          * @note   如果周期任务已经开始，则该函数设置不会生效
          * @param  delay 周期间隔
          * @retval None
          */
        void setDelay(std::chrono::milliseconds period) { period_ = period; }

    private:

        // 周期间隔
        std::chrono::milliseconds period_;

    };

}